KERNEL		= $(shell uname -s)
CC		= $(CROSS)gcc
BITS		= 64
EFI_ARCH	= x86_64
#BITS		= 32
#EFI_ARCH	= x86


#TARGETS += fvloader.ffs
TARGETS += linuxboot.ffs
#TARGETS += hello.ffs

all: $(TARGETS)

clean: FORCE
	$(RM) *.efi *.exe *.rom *.o .*.d $(TARGETS)

linuxboot.exe: linuxboot.o efifv.o
hello.exe: hello.o

FORCE:

%.exe:
	$(CROSS)ld \
		$(LDFLAGS) \
		-T elf_x86_64_efi.lds \
		-o $@ \
		$^

%.efi: %.exe
	$(CROSS)objcopy \
		-j .text -j .sdata -j .data -j .dynamic \
		-j .dynsym  -j .rel -j .rela -j .reloc \
		--subsystem efi-bsd \
		--target efi-app-$(EFI_ARCH) \
		$^ \
		$@
	# fixup the PE32 characteristic field to make DxeCore happy
	/usr/bin/printf '\x2E\x00' | dd of=$@ conv=notrunc bs=1 seek=150 status=none

%.ffs: %.efi
	../bin/create-ffs$(if $(USE_UTK),.utk,) \
		-o $@ \
		--type DRIVER \
		--version 1.0 \
		--name "$(basename $@)" \
		--depex TRUE \
		$<

CFLAGS += \
	-std=c99 \
	-D__efi__ \
	-DGNU_EFI_USE_MS_ABI \
	-fshort-wchar \
	-mno-red-zone \
	-fno-stack-protector \
	-m$(BITS) \
	-fpic \
	-O3 \
	-W \
	-Wall \
	-I . \
	-I efi/x86_64 \
	-MMD \
	-MF .$(notdir $@).d \

LDFLAGS += \
	-nostdlib \
	-znocombreloc \
	-shared \
	-Bsymbolic \

NO_LFLAGS += \
	-T $(EFI_LDS) \
	-L $(EFILIB) \
	-L $(LIB) \
	$(EFI_CRT_OBJS)  \


-include .*.d
